const snakeCase = (string) =>
  string
    .match(/[A-Z]{1,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g)
    .map((x) => x.toLowerCase())
    .join("_");

// console.log(snakeCase("Foo Bar"));
// console.log(snakeCase("----Foo——————Bar---AAAssss"));
// console.log(snakeCase("----Foosss——————Bar"));
// console.log(snakeCase("----Fo2222—---bar"));
// console.log(snakeCase("----fo2222—---bar"));

const snakeCase2 = (string) => {
  return string
    .match(/[A-Z]{1,}[a-z]{1,}(?=[A-Z]?[a-z]{1,})/g)
    .map((x) => x.toLowerCase())
    .join("_");
};

console.log(snakeCase2("foo Bar"));
console.log(snakeCase2("----Foo——————Bar---AAAssss"));
console.log(snakeCase2("----Foosss——————Bar"));
console.log(snakeCase2("----fo2222—---bar"));
console.log(snakeCase2("----fo2222—---bar"));
